package com.Questions.hash;

import java.util.*;
public class leetcode734 {
    // 错解 当相似的一组词出现多次时 map中的映射会被覆盖
    // 还有就是 这个关系的不可传递性

//    public boolean areSentencesSimilar
//            (String[] sentence1, String[] sentence2, List<List<String>> similarPairs) {
//        if(sentence1.length!=sentence2.length){
//            return false;
//        }
//        Map<String,String> map=new HashMap<>();
//        for(List<String> str:similarPairs){
//            map.put(str.get(0),str.get(1));
//            map.put(str.get(1),str.get(0));
//        }
//        for(int i=0;i<sentence1.length;++i){
//            if(!(sentence1[i].equals(sentence2[i])||
//                    map.containsKey(sentence1[i])&&map.get(sentence1[i]).equals(sentence2[i]))){
//                return false;
//            }
//        }
//        return true;
//
//    }
    // 使用题解的这种方法 并不会将原有的关系覆盖
    // 而且保证了不可传递的特点
    //
    public boolean areSentencesSimilar(String[] sentence1, String[] sentence2, List<List<String>> similarPairs) {
        if (sentence1.length != sentence2.length) {
            return false;
        }
        Set<String> pairset = new HashSet<String>();
        for (List<String> pair : similarPairs) {
            pairset.add(pair.get(0) + "#" + pair.get(1));
        }
        for (int i = 0; i < sentence1.length; ++i) {
            if (!sentence1[i].equals(sentence2[i]) &&
                    !pairset.contains(sentence1[i] + "#" + sentence2[i]) &&
                    !pairset.contains(sentence2[i] + "#" + sentence1[i])) {
                return false;
            }
        }
        return true;
    }

}
